{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5-1 数据管道Dataset\n",
    "\n",
    "如果需要训练的数据大小不大，例如不到1G，那么可以直接全部读入内存中进行训练，这样一般效率最高。\n",
    "但如果需要训练的数据很大，例如超过10G，无法一次载入内存，那么通常需要在训练的过程中分批逐渐读入。\n",
    " \n",
    "使用 tf.data API 可以构建数据输入管道，轻松处理大量的数据，不同的数据格式，以及不同的数据转换。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 一、构建数据管道\n",
    "\n",
    "可以从 Numpy array, Pandas DataFrame, Python generator, csv文件, 文本文件, 文件路径, tfrecords文件等方式构建数据管道。\n",
    "\n",
    "其中通过Numpy array, Pandas DataFrame, 文件路径构建数据管道是最常用的方法。\n",
    "\n",
    "通过tfrecords文件方式构建数据管道较为复杂，需要对样本构建tf.Example后压缩成字符串写到tfrecoreds文件，读取后再解析成tf.Example。\n",
    "\n",
    "但tfrecoreds文件的优点是压缩后文件较小，便于网络传播，加载速度较快。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**1、从Numpy array构建数据管道**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tf.Tensor([5.1 3.5 1.4 0.2], shape=(4,), dtype=float64) tf.Tensor(0, shape=(), dtype=int64)\n",
      "tf.Tensor([4.9 3.  1.4 0.2], shape=(4,), dtype=float64) tf.Tensor(0, shape=(), dtype=int64)\n",
      "tf.Tensor([4.7 3.2 1.3 0.2], shape=(4,), dtype=float64) tf.Tensor(0, shape=(), dtype=int64)\n",
      "tf.Tensor([4.6 3.1 1.5 0.2], shape=(4,), dtype=float64) tf.Tensor(0, shape=(), dtype=int64)\n",
      "tf.Tensor([5.  3.6 1.4 0.2], shape=(4,), dtype=float64) tf.Tensor(0, shape=(), dtype=int64)\n"
     ]
    }
   ],
   "source": [
    "# 从Numpy array构建数据管道\n",
    "\n",
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "from sklearn import datasets\n",
    "\n",
    "iris = datasets.load_iris()\n",
    "\n",
    "ds1 = tf.data.Dataset.from_tensor_slices((iris[\"data\"], iris[\"target\"]))\n",
    "for features, label in ds1.take(5):\n",
    "    print(features, label)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**2、从 Pandas DataFrame构建数据管道**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'petal length (cm)': 1.4,\n",
      " 'petal width (cm)': 0.2,\n",
      " 'sepal length (cm)': 5.1,\n",
      " 'sepal width (cm)': 3.5} 0\n",
      "{'petal length (cm)': 1.4,\n",
      " 'petal width (cm)': 0.2,\n",
      " 'sepal length (cm)': 4.9,\n",
      " 'sepal width (cm)': 3} 0\n",
      "{'petal length (cm)': 1.3,\n",
      " 'petal width (cm)': 0.2,\n",
      " 'sepal length (cm)': 4.7,\n",
      " 'sepal width (cm)': 3.2} 0\n"
     ]
    }
   ],
   "source": [
    "# 从 Pandas DataFrame构建数据管道\n",
    "import tensorflow as tf\n",
    "from sklearn import datasets \n",
    "import pandas as pd\n",
    "\n",
    "iris = datasets.load_iris()\n",
    "dfiris = pd.DataFrame(iris[\"data\"], columns=iris.feature_names)\n",
    "ds2 = tf.data.Dataset.from_tensor_slices((dfiris.to_dict(\"list\"), iris[\"target\"]))\n",
    "\n",
    "for features,label in ds2.take(3):\n",
    "    tf.print(features,label)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pretty printing has been turned ON\n",
      "{'sepal length (cm)': <tf.Tensor: shape=(), dtype=float32, numpy=5.1>, 'sepal width (cm)': <tf.Tensor: shape=(), dtype=float32, numpy=3.5>, 'petal length (cm)': <tf.Tensor: shape=(), dtype=float32, numpy=1.4>, 'petal width (cm)': <tf.Tensor: shape=(), dtype=float32, numpy=0.2>} tf.Tensor(0, shape=(), dtype=int64)\n",
      "{'sepal length (cm)': <tf.Tensor: shape=(), dtype=float32, numpy=4.9>, 'sepal width (cm)': <tf.Tensor: shape=(), dtype=float32, numpy=3.0>, 'petal length (cm)': <tf.Tensor: shape=(), dtype=float32, numpy=1.4>, 'petal width (cm)': <tf.Tensor: shape=(), dtype=float32, numpy=0.2>} tf.Tensor(0, shape=(), dtype=int64)\n",
      "{'sepal length (cm)': <tf.Tensor: shape=(), dtype=float32, numpy=4.7>, 'sepal width (cm)': <tf.Tensor: shape=(), dtype=float32, numpy=3.2>, 'petal length (cm)': <tf.Tensor: shape=(), dtype=float32, numpy=1.3>, 'petal width (cm)': <tf.Tensor: shape=(), dtype=float32, numpy=0.2>} tf.Tensor(0, shape=(), dtype=int64)\n"
     ]
    }
   ],
   "source": [
    "%pprint on\n",
    "for features,label in ds2.take(3):\n",
    "    print(features,label)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**3、从Python generator构建数据管道**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 2000 images belonging to 2 classes.\n",
      "{'airplane': 0, 'automobile': 1}\n"
     ]
    }
   ],
   "source": [
    "# 从Python generator构建数据管道\n",
    "import tensorflow as tf\n",
    "from matplotlib import pyplot as plt\n",
    "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
    "\n",
    "# 定义一个从文件中读取图片的generator\n",
    "image_generator = ImageDataGenerator(rescale=1.0/255).flow_from_directory(\n",
    "                    \"./data/cifar2/test/\",\n",
    "                    target_size=(32, 32),\n",
    "                    batch_size=20,\n",
    "                    class_mode=\"binary\"\n",
    "                )\n",
    "\n",
    "classdict = image_generator.class_indices\n",
    "print(classdict)\n",
    "\n",
    "def generator():\n",
    "    for features, label in image_generator:\n",
    "        yield (features, label)\n",
    "        \n",
    "ds3 = tf.data.Dataset.from_generator(generator, output_types=(tf.float32, tf.int32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Created with matplotlib (http://matplotlib.org/) -->\n",
       "<svg height=\"359.178125pt\" version=\"1.1\" viewBox=\"0 0 353.658824 359.178125\" width=\"353.658824pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       " <defs>\n",
       "  <style type=\"text/css\">\n",
       "*{stroke-linecap:butt;stroke-linejoin:round;}\n",
       "  </style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 359.178125 \n",
       "L 353.658824 359.178125 \n",
       "L 353.658824 0 \n",
       "L 0 0 \n",
       "z\n",
       "\" style=\"fill:none;\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 10.7 118.247537 \n",
       "L 106.629412 118.247537 \n",
       "L 106.629412 22.318125 \n",
       "L 10.7 22.318125 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p74eeb12883)\">\n",
       "    <image height=\"96\" id=\"image67c2427d6c\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"10.7\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-22.247537\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_1\"/>\n",
       "   <g id=\"matplotlib.axis_2\"/>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 10.7 118.247537 \n",
       "L 10.7 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 106.629412 118.247537 \n",
       "L 106.629412 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 10.7 118.247537 \n",
       "L 106.629412 118.247537 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_6\">\n",
       "    <path d=\"M 10.7 22.318125 \n",
       "L 106.629412 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- label = 0 -->\n",
       "    <defs>\n",
       "     <path d=\"M 9.421875 75.984375 \n",
       "L 18.40625 75.984375 \n",
       "L 18.40625 0 \n",
       "L 9.421875 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-6c\"/>\n",
       "     <path d=\"M 34.28125 27.484375 \n",
       "Q 23.390625 27.484375 19.1875 25 \n",
       "Q 14.984375 22.515625 14.984375 16.5 \n",
       "Q 14.984375 11.71875 18.140625 8.90625 \n",
       "Q 21.296875 6.109375 26.703125 6.109375 \n",
       "Q 34.1875 6.109375 38.703125 11.40625 \n",
       "Q 43.21875 16.703125 43.21875 25.484375 \n",
       "L 43.21875 27.484375 \n",
       "z\n",
       "M 52.203125 31.203125 \n",
       "L 52.203125 0 \n",
       "L 43.21875 0 \n",
       "L 43.21875 8.296875 \n",
       "Q 40.140625 3.328125 35.546875 0.953125 \n",
       "Q 30.953125 -1.421875 24.3125 -1.421875 \n",
       "Q 15.921875 -1.421875 10.953125 3.296875 \n",
       "Q 6 8.015625 6 15.921875 \n",
       "Q 6 25.140625 12.171875 29.828125 \n",
       "Q 18.359375 34.515625 30.609375 34.515625 \n",
       "L 43.21875 34.515625 \n",
       "L 43.21875 35.40625 \n",
       "Q 43.21875 41.609375 39.140625 45 \n",
       "Q 35.0625 48.390625 27.6875 48.390625 \n",
       "Q 23 48.390625 18.546875 47.265625 \n",
       "Q 14.109375 46.140625 10.015625 43.890625 \n",
       "L 10.015625 52.203125 \n",
       "Q 14.9375 54.109375 19.578125 55.046875 \n",
       "Q 24.21875 56 28.609375 56 \n",
       "Q 40.484375 56 46.34375 49.84375 \n",
       "Q 52.203125 43.703125 52.203125 31.203125 \n",
       "z\n",
       "\" id=\"DejaVuSans-61\"/>\n",
       "     <path d=\"M 48.6875 27.296875 \n",
       "Q 48.6875 37.203125 44.609375 42.84375 \n",
       "Q 40.53125 48.484375 33.40625 48.484375 \n",
       "Q 26.265625 48.484375 22.1875 42.84375 \n",
       "Q 18.109375 37.203125 18.109375 27.296875 \n",
       "Q 18.109375 17.390625 22.1875 11.75 \n",
       "Q 26.265625 6.109375 33.40625 6.109375 \n",
       "Q 40.53125 6.109375 44.609375 11.75 \n",
       "Q 48.6875 17.390625 48.6875 27.296875 \n",
       "z\n",
       "M 18.109375 46.390625 \n",
       "Q 20.953125 51.265625 25.265625 53.625 \n",
       "Q 29.59375 56 35.59375 56 \n",
       "Q 45.5625 56 51.78125 48.09375 \n",
       "Q 58.015625 40.1875 58.015625 27.296875 \n",
       "Q 58.015625 14.40625 51.78125 6.484375 \n",
       "Q 45.5625 -1.421875 35.59375 -1.421875 \n",
       "Q 29.59375 -1.421875 25.265625 0.953125 \n",
       "Q 20.953125 3.328125 18.109375 8.203125 \n",
       "L 18.109375 0 \n",
       "L 9.078125 0 \n",
       "L 9.078125 75.984375 \n",
       "L 18.109375 75.984375 \n",
       "z\n",
       "\" id=\"DejaVuSans-62\"/>\n",
       "     <path d=\"M 56.203125 29.59375 \n",
       "L 56.203125 25.203125 \n",
       "L 14.890625 25.203125 \n",
       "Q 15.484375 15.921875 20.484375 11.0625 \n",
       "Q 25.484375 6.203125 34.421875 6.203125 \n",
       "Q 39.59375 6.203125 44.453125 7.46875 \n",
       "Q 49.3125 8.734375 54.109375 11.28125 \n",
       "L 54.109375 2.78125 \n",
       "Q 49.265625 0.734375 44.1875 -0.34375 \n",
       "Q 39.109375 -1.421875 33.890625 -1.421875 \n",
       "Q 20.796875 -1.421875 13.15625 6.1875 \n",
       "Q 5.515625 13.8125 5.515625 26.8125 \n",
       "Q 5.515625 40.234375 12.765625 48.109375 \n",
       "Q 20.015625 56 32.328125 56 \n",
       "Q 43.359375 56 49.78125 48.890625 \n",
       "Q 56.203125 41.796875 56.203125 29.59375 \n",
       "z\n",
       "M 47.21875 32.234375 \n",
       "Q 47.125 39.59375 43.09375 43.984375 \n",
       "Q 39.0625 48.390625 32.421875 48.390625 \n",
       "Q 24.90625 48.390625 20.390625 44.140625 \n",
       "Q 15.875 39.890625 15.1875 32.171875 \n",
       "z\n",
       "\" id=\"DejaVuSans-65\"/>\n",
       "     <path id=\"DejaVuSans-20\"/>\n",
       "     <path d=\"M 10.59375 45.40625 \n",
       "L 73.1875 45.40625 \n",
       "L 73.1875 37.203125 \n",
       "L 10.59375 37.203125 \n",
       "z\n",
       "M 10.59375 25.484375 \n",
       "L 73.1875 25.484375 \n",
       "L 73.1875 17.1875 \n",
       "L 10.59375 17.1875 \n",
       "z\n",
       "\" id=\"DejaVuSans-3d\"/>\n",
       "     <path d=\"M 31.78125 66.40625 \n",
       "Q 24.171875 66.40625 20.328125 58.90625 \n",
       "Q 16.5 51.421875 16.5 36.375 \n",
       "Q 16.5 21.390625 20.328125 13.890625 \n",
       "Q 24.171875 6.390625 31.78125 6.390625 \n",
       "Q 39.453125 6.390625 43.28125 13.890625 \n",
       "Q 47.125 21.390625 47.125 36.375 \n",
       "Q 47.125 51.421875 43.28125 58.90625 \n",
       "Q 39.453125 66.40625 31.78125 66.40625 \n",
       "z\n",
       "M 31.78125 74.21875 \n",
       "Q 44.046875 74.21875 50.515625 64.515625 \n",
       "Q 56.984375 54.828125 56.984375 36.375 \n",
       "Q 56.984375 17.96875 50.515625 8.265625 \n",
       "Q 44.046875 -1.421875 31.78125 -1.421875 \n",
       "Q 19.53125 -1.421875 13.0625 8.265625 \n",
       "Q 6.59375 17.96875 6.59375 36.375 \n",
       "Q 6.59375 54.828125 13.0625 64.515625 \n",
       "Q 19.53125 74.21875 31.78125 74.21875 \n",
       "z\n",
       "\" id=\"DejaVuSans-30\"/>\n",
       "    </defs>\n",
       "    <g transform=\"translate(31.494081 16.318125)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_2\">\n",
       "   <g id=\"patch_7\">\n",
       "    <path d=\"M 128.864706 118.247537 \n",
       "L 224.794118 118.247537 \n",
       "L 224.794118 22.318125 \n",
       "L 128.864706 22.318125 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p41857ace5d)\">\n",
       "    <image height=\"96\" id=\"image0fa31dc66b\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"128.864706\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-22.247537\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_3\"/>\n",
       "   <g id=\"matplotlib.axis_4\"/>\n",
       "   <g id=\"patch_8\">\n",
       "    <path d=\"M 128.864706 118.247537 \n",
       "L 128.864706 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_9\">\n",
       "    <path d=\"M 224.794118 118.247537 \n",
       "L 224.794118 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_10\">\n",
       "    <path d=\"M 128.864706 118.247537 \n",
       "L 224.794118 118.247537 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_11\">\n",
       "    <path d=\"M 128.864706 22.318125 \n",
       "L 224.794118 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_2\">\n",
       "    <!-- label = 1 -->\n",
       "    <defs>\n",
       "     <path d=\"M 12.40625 8.296875 \n",
       "L 28.515625 8.296875 \n",
       "L 28.515625 63.921875 \n",
       "L 10.984375 60.40625 \n",
       "L 10.984375 69.390625 \n",
       "L 28.421875 72.90625 \n",
       "L 38.28125 72.90625 \n",
       "L 38.28125 8.296875 \n",
       "L 54.390625 8.296875 \n",
       "L 54.390625 0 \n",
       "L 12.40625 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-31\"/>\n",
       "    </defs>\n",
       "    <g transform=\"translate(149.658787 16.318125)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_3\">\n",
       "   <g id=\"patch_12\">\n",
       "    <path d=\"M 247.029412 118.247537 \n",
       "L 342.958824 118.247537 \n",
       "L 342.958824 22.318125 \n",
       "L 247.029412 22.318125 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p684a373b4d)\">\n",
       "    <image height=\"96\" id=\"image70f05e7e28\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"247.029412\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-22.247537\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_5\"/>\n",
       "   <g id=\"matplotlib.axis_6\"/>\n",
       "   <g id=\"patch_13\">\n",
       "    <path d=\"M 247.029412 118.247537 \n",
       "L 247.029412 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_14\">\n",
       "    <path d=\"M 342.958824 118.247537 \n",
       "L 342.958824 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_15\">\n",
       "    <path d=\"M 247.029412 118.247537 \n",
       "L 342.958824 118.247537 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_16\">\n",
       "    <path d=\"M 247.029412 22.318125 \n",
       "L 342.958824 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_3\">\n",
       "    <!-- label = 1 -->\n",
       "    <g transform=\"translate(267.823493 16.318125)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_4\">\n",
       "   <g id=\"patch_17\">\n",
       "    <path d=\"M 10.7 233.362831 \n",
       "L 106.629412 233.362831 \n",
       "L 106.629412 137.433419 \n",
       "L 10.7 137.433419 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#pb879b4c8d9)\">\n",
       "    <image height=\"96\" id=\"image73d15132a2\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"10.7\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-137.362831\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_7\"/>\n",
       "   <g id=\"matplotlib.axis_8\"/>\n",
       "   <g id=\"patch_18\">\n",
       "    <path d=\"M 10.7 233.362831 \n",
       "L 10.7 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_19\">\n",
       "    <path d=\"M 106.629412 233.362831 \n",
       "L 106.629412 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_20\">\n",
       "    <path d=\"M 10.7 233.362831 \n",
       "L 106.629412 233.362831 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_21\">\n",
       "    <path d=\"M 10.7 137.433419 \n",
       "L 106.629412 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_4\">\n",
       "    <!-- label = 1 -->\n",
       "    <g transform=\"translate(31.494081 131.433419)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_5\">\n",
       "   <g id=\"patch_22\">\n",
       "    <path d=\"M 128.864706 233.362831 \n",
       "L 224.794118 233.362831 \n",
       "L 224.794118 137.433419 \n",
       "L 128.864706 137.433419 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#pbeeb39ab6c)\">\n",
       "    <image height=\"96\" id=\"imaged976ef4a2f\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"128.864706\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-137.362831\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_9\"/>\n",
       "   <g id=\"matplotlib.axis_10\"/>\n",
       "   <g id=\"patch_23\">\n",
       "    <path d=\"M 128.864706 233.362831 \n",
       "L 128.864706 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_24\">\n",
       "    <path d=\"M 224.794118 233.362831 \n",
       "L 224.794118 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_25\">\n",
       "    <path d=\"M 128.864706 233.362831 \n",
       "L 224.794118 233.362831 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_26\">\n",
       "    <path d=\"M 128.864706 137.433419 \n",
       "L 224.794118 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_5\">\n",
       "    <!-- label = 1 -->\n",
       "    <g transform=\"translate(149.658787 131.433419)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_6\">\n",
       "   <g id=\"patch_27\">\n",
       "    <path d=\"M 247.029412 233.362831 \n",
       "L 342.958824 233.362831 \n",
       "L 342.958824 137.433419 \n",
       "L 247.029412 137.433419 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#pc537b3466e)\">\n",
       "    <image height=\"96\" id=\"image494462448b\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"247.029412\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-137.362831\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_11\"/>\n",
       "   <g id=\"matplotlib.axis_12\"/>\n",
       "   <g id=\"patch_28\">\n",
       "    <path d=\"M 247.029412 233.362831 \n",
       "L 247.029412 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_29\">\n",
       "    <path d=\"M 342.958824 233.362831 \n",
       "L 342.958824 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_30\">\n",
       "    <path d=\"M 247.029412 233.362831 \n",
       "L 342.958824 233.362831 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_31\">\n",
       "    <path d=\"M 247.029412 137.433419 \n",
       "L 342.958824 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_6\">\n",
       "    <!-- label = 1 -->\n",
       "    <g transform=\"translate(267.823493 131.433419)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_7\">\n",
       "   <g id=\"patch_32\">\n",
       "    <path d=\"M 10.7 348.478125 \n",
       "L 106.629412 348.478125 \n",
       "L 106.629412 252.548713 \n",
       "L 10.7 252.548713 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p48ada5b271)\">\n",
       "    <image height=\"96\" id=\"image89792025ba\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"10.7\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-252.478125\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_13\"/>\n",
       "   <g id=\"matplotlib.axis_14\"/>\n",
       "   <g id=\"patch_33\">\n",
       "    <path d=\"M 10.7 348.478125 \n",
       "L 10.7 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_34\">\n",
       "    <path d=\"M 106.629412 348.478125 \n",
       "L 106.629412 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_35\">\n",
       "    <path d=\"M 10.7 348.478125 \n",
       "L 106.629412 348.478125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_36\">\n",
       "    <path d=\"M 10.7 252.548713 \n",
       "L 106.629412 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_7\">\n",
       "    <!-- label = 1 -->\n",
       "    <g transform=\"translate(31.494081 246.548713)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_8\">\n",
       "   <g id=\"patch_37\">\n",
       "    <path d=\"M 128.864706 348.478125 \n",
       "L 224.794118 348.478125 \n",
       "L 224.794118 252.548713 \n",
       "L 128.864706 252.548713 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#pc96329eb6b)\">\n",
       "    <image height=\"96\" id=\"image221cf5cf2a\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"128.864706\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-252.478125\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_15\"/>\n",
       "   <g id=\"matplotlib.axis_16\"/>\n",
       "   <g id=\"patch_38\">\n",
       "    <path d=\"M 128.864706 348.478125 \n",
       "L 128.864706 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_39\">\n",
       "    <path d=\"M 224.794118 348.478125 \n",
       "L 224.794118 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_40\">\n",
       "    <path d=\"M 128.864706 348.478125 \n",
       "L 224.794118 348.478125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_41\">\n",
       "    <path d=\"M 128.864706 252.548713 \n",
       "L 224.794118 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_8\">\n",
       "    <!-- label = 0 -->\n",
       "    <g transform=\"translate(149.658787 246.548713)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_9\">\n",
       "   <g id=\"patch_42\">\n",
       "    <path d=\"M 247.029412 348.478125 \n",
       "L 342.958824 348.478125 \n",
       "L 342.958824 252.548713 \n",
       "L 247.029412 252.548713 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p10e5cb45ef)\">\n",
       "    <image height=\"96\" id=\"imagee7ffb7a75b\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"247.029412\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-252.478125\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_17\"/>\n",
       "   <g id=\"matplotlib.axis_18\"/>\n",
       "   <g id=\"patch_43\">\n",
       "    <path d=\"M 247.029412 348.478125 \n",
       "L 247.029412 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_44\">\n",
       "    <path d=\"M 342.958824 348.478125 \n",
       "L 342.958824 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_45\">\n",
       "    <path d=\"M 247.029412 348.478125 \n",
       "L 342.958824 348.478125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_46\">\n",
       "    <path d=\"M 247.029412 252.548713 \n",
       "L 342.958824 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_9\">\n",
       "    <!-- label = 0 -->\n",
       "    <g transform=\"translate(267.823493 246.548713)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p74eeb12883\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"10.7\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p41857ace5d\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"128.864706\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p684a373b4d\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"247.029412\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"pb879b4c8d9\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"10.7\" y=\"137.433419\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"pbeeb39ab6c\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"128.864706\" y=\"137.433419\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"pc537b3466e\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"247.029412\" y=\"137.433419\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p48ada5b271\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"10.7\" y=\"252.548713\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"pc96329eb6b\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"128.864706\" y=\"252.548713\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p10e5cb45ef\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"247.029412\" y=\"252.548713\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 432x432 with 9 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "%config InlineBackend.figure_format='svg'\n",
    "\n",
    "plt.figure(figsize=(6, 6))\n",
    "for i, (img, label) in enumerate(ds3.unbatch().take(9)):\n",
    "    ax = plt.subplot(3, 3, i+1)\n",
    "    ax.imshow(img.numpy())\n",
    "    ax.set_title(\"label = %d\" % label)\n",
    "    ax.set_xticks([])\n",
    "    ax.set_yticks([])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**4、从csv文件构建数据管道**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "OrderedDict([('PassengerId', [7 54 28]),\n",
      "             ('Pclass', [\"\" \"\" \"\"]),\n",
      "             ('Name', [\"S\" \"S\" \"S\"]),\n",
      "             ('Sex', [26.25 23 10.5]),\n",
      "             ('Age', [\"Hart, Miss. Eva Miriam\" \"Hocking, Mrs. Elizabeth (Eliza Needs)\" \"Banfield, Mr. Frederick James\"]),\n",
      "             ('SibSp', [2 3 0]),\n",
      "             ('Parch', [536 775 884]),\n",
      "             ('Ticket', [2 2 2]),\n",
      "             ('Fare', [\"female\" \"female\" \"male\"]),\n",
      "             ('Cabin', [0 1 0]),\n",
      "             ('Embarked', [\"F.C.C. 13529\" \"29105\" \"C.A./SOTON 34068\"])]) [1 1 0]\n",
      "OrderedDict([('PassengerId', [44 34 16]),\n",
      "             ('Pclass', [\"\" \"D56\" \"\"]),\n",
      "             ('Name', [\"S\" \"S\" \"S\"]),\n",
      "             ('Sex', [16.1 13 18]),\n",
      "             ('Age', [\"Cribb, Mr. John Hatfield\" \"Beesley, Mr. Lawrence\" \"Vander Planke, Mr. Leo Edmondus\"]),\n",
      "             ('SibSp', [1 0 0]),\n",
      "             ('Parch', [161 22 334]),\n",
      "             ('Ticket', [3 2 3]),\n",
      "             ('Fare', [\"male\" \"male\" \"male\"]),\n",
      "             ('Cabin', [0 0 2]),\n",
      "             ('Embarked', [\"371362\" \"248698\" \"345764\"])]) [0 1 0]\n"
     ]
    }
   ],
   "source": [
    "# 从csv文件构建数据管道\n",
    "ds4 = tf.data.experimental.make_csv_dataset(\n",
    "      file_pattern = [\"./data/titanic/train.csv\",\"./data/titanic/test.csv\"],\n",
    "      batch_size=3, \n",
    "      label_name=\"Survived\",\n",
    "      na_value=\"\",\n",
    "      num_epochs=1,\n",
    "      ignore_errors=True)\n",
    "\n",
    "for data,label in ds4.take(2):\n",
    "    tf.print(data,label)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**5、从文本文件构建数据管道**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "493,0,1,\"Molson, Mr. Harry Markland\",male,55.0,0,0,113787,30.5,C30,S\n",
      "53,1,1,\"Harper, Mrs. Henry Sleeper (Myna Haxtun)\",female,49.0,1,0,PC 17572,76.7292,D33,C\n",
      "388,1,2,\"Buss, Miss. Kate\",female,36.0,0,0,27849,13.0,,S\n",
      "192,0,2,\"Carbines, Mr. William\",male,19.0,0,0,28424,13.0,,S\n",
      "687,0,3,\"Panula, Mr. Jaako Arnold\",male,14.0,4,1,3101295,39.6875,,S\n"
     ]
    }
   ],
   "source": [
    "# 从文本文件构建数据管道\n",
    "ds5 = tf.data.TextLineDataset(\n",
    "    filenames = [\"./data/titanic/train.csv\",\"./data/titanic/test.csv\"]\n",
    "    ).skip(1) #略去第一行header\n",
    "\n",
    "for line in ds5.take(5):\n",
    "    tf.print(line)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**6、从文件路径构建数据管道**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "./data/cifar2/train/airplane/3641.jpg\n",
      "./data/cifar2/train/airplane/2605.jpg\n",
      "./data/cifar2/train/automobile/1785.jpg\n",
      "./data/cifar2/train/airplane/1551.jpg\n",
      "./data/cifar2/train/automobile/2156.jpg\n"
     ]
    }
   ],
   "source": [
    "ds6 = tf.data.Dataset.list_files(\"./data/cifar2/train/*/*.jpg\")\n",
    "for file in ds6.take(5):\n",
    "    tf.print(file)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Created with matplotlib (http://matplotlib.org/) -->\n",
       "<svg height=\"250.458125pt\" version=\"1.1\" viewBox=\"0 0 238.84 250.458125\" width=\"238.84pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       " <defs>\n",
       "  <style type=\"text/css\">\n",
       "*{stroke-linecap:butt;stroke-linejoin:round;}\n",
       "  </style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 250.458125 \n",
       "L 238.84 250.458125 \n",
       "L 238.84 0 \n",
       "L 0 0 \n",
       "z\n",
       "\" style=\"fill:none;\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 10.7 239.758125 \n",
       "L 228.14 239.758125 \n",
       "L 228.14 22.318125 \n",
       "L 10.7 22.318125 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p246c97211e)\">\n",
       "    <image height=\"218\" id=\"image75dda0d0ae\" transform=\"scale(1 -1)translate(0 -218)\" width=\"218\" x=\"10.7\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-21.758125\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_1\"/>\n",
       "   <g id=\"matplotlib.axis_2\"/>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 10.7 239.758125 \n",
       "L 10.7 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 228.14 239.758125 \n",
       "L 228.14 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 10.7 239.758125 \n",
       "L 228.14 239.758125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_6\">\n",
       "    <path d=\"M 10.7 22.318125 \n",
       "L 228.14 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- label = 1 -->\n",
       "    <defs>\n",
       "     <path d=\"M 9.421875 75.984375 \n",
       "L 18.40625 75.984375 \n",
       "L 18.40625 0 \n",
       "L 9.421875 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-6c\"/>\n",
       "     <path d=\"M 34.28125 27.484375 \n",
       "Q 23.390625 27.484375 19.1875 25 \n",
       "Q 14.984375 22.515625 14.984375 16.5 \n",
       "Q 14.984375 11.71875 18.140625 8.90625 \n",
       "Q 21.296875 6.109375 26.703125 6.109375 \n",
       "Q 34.1875 6.109375 38.703125 11.40625 \n",
       "Q 43.21875 16.703125 43.21875 25.484375 \n",
       "L 43.21875 27.484375 \n",
       "z\n",
       "M 52.203125 31.203125 \n",
       "L 52.203125 0 \n",
       "L 43.21875 0 \n",
       "L 43.21875 8.296875 \n",
       "Q 40.140625 3.328125 35.546875 0.953125 \n",
       "Q 30.953125 -1.421875 24.3125 -1.421875 \n",
       "Q 15.921875 -1.421875 10.953125 3.296875 \n",
       "Q 6 8.015625 6 15.921875 \n",
       "Q 6 25.140625 12.171875 29.828125 \n",
       "Q 18.359375 34.515625 30.609375 34.515625 \n",
       "L 43.21875 34.515625 \n",
       "L 43.21875 35.40625 \n",
       "Q 43.21875 41.609375 39.140625 45 \n",
       "Q 35.0625 48.390625 27.6875 48.390625 \n",
       "Q 23 48.390625 18.546875 47.265625 \n",
       "Q 14.109375 46.140625 10.015625 43.890625 \n",
       "L 10.015625 52.203125 \n",
       "Q 14.9375 54.109375 19.578125 55.046875 \n",
       "Q 24.21875 56 28.609375 56 \n",
       "Q 40.484375 56 46.34375 49.84375 \n",
       "Q 52.203125 43.703125 52.203125 31.203125 \n",
       "z\n",
       "\" id=\"DejaVuSans-61\"/>\n",
       "     <path d=\"M 48.6875 27.296875 \n",
       "Q 48.6875 37.203125 44.609375 42.84375 \n",
       "Q 40.53125 48.484375 33.40625 48.484375 \n",
       "Q 26.265625 48.484375 22.1875 42.84375 \n",
       "Q 18.109375 37.203125 18.109375 27.296875 \n",
       "Q 18.109375 17.390625 22.1875 11.75 \n",
       "Q 26.265625 6.109375 33.40625 6.109375 \n",
       "Q 40.53125 6.109375 44.609375 11.75 \n",
       "Q 48.6875 17.390625 48.6875 27.296875 \n",
       "z\n",
       "M 18.109375 46.390625 \n",
       "Q 20.953125 51.265625 25.265625 53.625 \n",
       "Q 29.59375 56 35.59375 56 \n",
       "Q 45.5625 56 51.78125 48.09375 \n",
       "Q 58.015625 40.1875 58.015625 27.296875 \n",
       "Q 58.015625 14.40625 51.78125 6.484375 \n",
       "Q 45.5625 -1.421875 35.59375 -1.421875 \n",
       "Q 29.59375 -1.421875 25.265625 0.953125 \n",
       "Q 20.953125 3.328125 18.109375 8.203125 \n",
       "L 18.109375 0 \n",
       "L 9.078125 0 \n",
       "L 9.078125 75.984375 \n",
       "L 18.109375 75.984375 \n",
       "z\n",
       "\" id=\"DejaVuSans-62\"/>\n",
       "     <path d=\"M 56.203125 29.59375 \n",
       "L 56.203125 25.203125 \n",
       "L 14.890625 25.203125 \n",
       "Q 15.484375 15.921875 20.484375 11.0625 \n",
       "Q 25.484375 6.203125 34.421875 6.203125 \n",
       "Q 39.59375 6.203125 44.453125 7.46875 \n",
       "Q 49.3125 8.734375 54.109375 11.28125 \n",
       "L 54.109375 2.78125 \n",
       "Q 49.265625 0.734375 44.1875 -0.34375 \n",
       "Q 39.109375 -1.421875 33.890625 -1.421875 \n",
       "Q 20.796875 -1.421875 13.15625 6.1875 \n",
       "Q 5.515625 13.8125 5.515625 26.8125 \n",
       "Q 5.515625 40.234375 12.765625 48.109375 \n",
       "Q 20.015625 56 32.328125 56 \n",
       "Q 43.359375 56 49.78125 48.890625 \n",
       "Q 56.203125 41.796875 56.203125 29.59375 \n",
       "z\n",
       "M 47.21875 32.234375 \n",
       "Q 47.125 39.59375 43.09375 43.984375 \n",
       "Q 39.0625 48.390625 32.421875 48.390625 \n",
       "Q 24.90625 48.390625 20.390625 44.140625 \n",
       "Q 15.875 39.890625 15.1875 32.171875 \n",
       "z\n",
       "\" id=\"DejaVuSans-65\"/>\n",
       "     <path id=\"DejaVuSans-20\"/>\n",
       "     <path d=\"M 10.59375 45.40625 \n",
       "L 73.1875 45.40625 \n",
       "L 73.1875 37.203125 \n",
       "L 10.59375 37.203125 \n",
       "z\n",
       "M 10.59375 25.484375 \n",
       "L 73.1875 25.484375 \n",
       "L 73.1875 17.1875 \n",
       "L 10.59375 17.1875 \n",
       "z\n",
       "\" id=\"DejaVuSans-3d\"/>\n",
       "     <path d=\"M 12.40625 8.296875 \n",
       "L 28.515625 8.296875 \n",
       "L 28.515625 63.921875 \n",
       "L 10.984375 60.40625 \n",
       "L 10.984375 69.390625 \n",
       "L 28.421875 72.90625 \n",
       "L 38.28125 72.90625 \n",
       "L 38.28125 8.296875 \n",
       "L 54.390625 8.296875 \n",
       "L 54.390625 0 \n",
       "L 12.40625 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-31\"/>\n",
       "    </defs>\n",
       "    <g transform=\"translate(92.249375 16.318125)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p246c97211e\">\n",
       "   <rect height=\"217.44\" width=\"217.44\" x=\"10.7\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Created with matplotlib (http://matplotlib.org/) -->\n",
       "<svg height=\"250.458125pt\" version=\"1.1\" viewBox=\"0 0 238.84 250.458125\" width=\"238.84pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       " <defs>\n",
       "  <style type=\"text/css\">\n",
       "*{stroke-linecap:butt;stroke-linejoin:round;}\n",
       "  </style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 250.458125 \n",
       "L 238.84 250.458125 \n",
       "L 238.84 0 \n",
       "L 0 0 \n",
       "z\n",
       "\" style=\"fill:none;\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 10.7 239.758125 \n",
       "L 228.14 239.758125 \n",
       "L 228.14 22.318125 \n",
       "L 10.7 22.318125 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p97d7c4423e)\">\n",
       "    <image height=\"218\" id=\"image2a5cc001a7\" transform=\"scale(1 -1)translate(0 -218)\" width=\"218\" x=\"10.7\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-21.758125\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_1\"/>\n",
       "   <g id=\"matplotlib.axis_2\"/>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 10.7 239.758125 \n",
       "L 10.7 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 228.14 239.758125 \n",
       "L 228.14 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 10.7 239.758125 \n",
       "L 228.14 239.758125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_6\">\n",
       "    <path d=\"M 10.7 22.318125 \n",
       "L 228.14 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- label = 0 -->\n",
       "    <defs>\n",
       "     <path d=\"M 9.421875 75.984375 \n",
       "L 18.40625 75.984375 \n",
       "L 18.40625 0 \n",
       "L 9.421875 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-6c\"/>\n",
       "     <path d=\"M 34.28125 27.484375 \n",
       "Q 23.390625 27.484375 19.1875 25 \n",
       "Q 14.984375 22.515625 14.984375 16.5 \n",
       "Q 14.984375 11.71875 18.140625 8.90625 \n",
       "Q 21.296875 6.109375 26.703125 6.109375 \n",
       "Q 34.1875 6.109375 38.703125 11.40625 \n",
       "Q 43.21875 16.703125 43.21875 25.484375 \n",
       "L 43.21875 27.484375 \n",
       "z\n",
       "M 52.203125 31.203125 \n",
       "L 52.203125 0 \n",
       "L 43.21875 0 \n",
       "L 43.21875 8.296875 \n",
       "Q 40.140625 3.328125 35.546875 0.953125 \n",
       "Q 30.953125 -1.421875 24.3125 -1.421875 \n",
       "Q 15.921875 -1.421875 10.953125 3.296875 \n",
       "Q 6 8.015625 6 15.921875 \n",
       "Q 6 25.140625 12.171875 29.828125 \n",
       "Q 18.359375 34.515625 30.609375 34.515625 \n",
       "L 43.21875 34.515625 \n",
       "L 43.21875 35.40625 \n",
       "Q 43.21875 41.609375 39.140625 45 \n",
       "Q 35.0625 48.390625 27.6875 48.390625 \n",
       "Q 23 48.390625 18.546875 47.265625 \n",
       "Q 14.109375 46.140625 10.015625 43.890625 \n",
       "L 10.015625 52.203125 \n",
       "Q 14.9375 54.109375 19.578125 55.046875 \n",
       "Q 24.21875 56 28.609375 56 \n",
       "Q 40.484375 56 46.34375 49.84375 \n",
       "Q 52.203125 43.703125 52.203125 31.203125 \n",
       "z\n",
       "\" id=\"DejaVuSans-61\"/>\n",
       "     <path d=\"M 48.6875 27.296875 \n",
       "Q 48.6875 37.203125 44.609375 42.84375 \n",
       "Q 40.53125 48.484375 33.40625 48.484375 \n",
       "Q 26.265625 48.484375 22.1875 42.84375 \n",
       "Q 18.109375 37.203125 18.109375 27.296875 \n",
       "Q 18.109375 17.390625 22.1875 11.75 \n",
       "Q 26.265625 6.109375 33.40625 6.109375 \n",
       "Q 40.53125 6.109375 44.609375 11.75 \n",
       "Q 48.6875 17.390625 48.6875 27.296875 \n",
       "z\n",
       "M 18.109375 46.390625 \n",
       "Q 20.953125 51.265625 25.265625 53.625 \n",
       "Q 29.59375 56 35.59375 56 \n",
       "Q 45.5625 56 51.78125 48.09375 \n",
       "Q 58.015625 40.1875 58.015625 27.296875 \n",
       "Q 58.015625 14.40625 51.78125 6.484375 \n",
       "Q 45.5625 -1.421875 35.59375 -1.421875 \n",
       "Q 29.59375 -1.421875 25.265625 0.953125 \n",
       "Q 20.953125 3.328125 18.109375 8.203125 \n",
       "L 18.109375 0 \n",
       "L 9.078125 0 \n",
       "L 9.078125 75.984375 \n",
       "L 18.109375 75.984375 \n",
       "z\n",
       "\" id=\"DejaVuSans-62\"/>\n",
       "     <path d=\"M 56.203125 29.59375 \n",
       "L 56.203125 25.203125 \n",
       "L 14.890625 25.203125 \n",
       "Q 15.484375 15.921875 20.484375 11.0625 \n",
       "Q 25.484375 6.203125 34.421875 6.203125 \n",
       "Q 39.59375 6.203125 44.453125 7.46875 \n",
       "Q 49.3125 8.734375 54.109375 11.28125 \n",
       "L 54.109375 2.78125 \n",
       "Q 49.265625 0.734375 44.1875 -0.34375 \n",
       "Q 39.109375 -1.421875 33.890625 -1.421875 \n",
       "Q 20.796875 -1.421875 13.15625 6.1875 \n",
       "Q 5.515625 13.8125 5.515625 26.8125 \n",
       "Q 5.515625 40.234375 12.765625 48.109375 \n",
       "Q 20.015625 56 32.328125 56 \n",
       "Q 43.359375 56 49.78125 48.890625 \n",
       "Q 56.203125 41.796875 56.203125 29.59375 \n",
       "z\n",
       "M 47.21875 32.234375 \n",
       "Q 47.125 39.59375 43.09375 43.984375 \n",
       "Q 39.0625 48.390625 32.421875 48.390625 \n",
       "Q 24.90625 48.390625 20.390625 44.140625 \n",
       "Q 15.875 39.890625 15.1875 32.171875 \n",
       "z\n",
       "\" id=\"DejaVuSans-65\"/>\n",
       "     <path id=\"DejaVuSans-20\"/>\n",
       "     <path d=\"M 10.59375 45.40625 \n",
       "L 73.1875 45.40625 \n",
       "L 73.1875 37.203125 \n",
       "L 10.59375 37.203125 \n",
       "z\n",
       "M 10.59375 25.484375 \n",
       "L 73.1875 25.484375 \n",
       "L 73.1875 17.1875 \n",
       "L 10.59375 17.1875 \n",
       "z\n",
       "\" id=\"DejaVuSans-3d\"/>\n",
       "     <path d=\"M 31.78125 66.40625 \n",
       "Q 24.171875 66.40625 20.328125 58.90625 \n",
       "Q 16.5 51.421875 16.5 36.375 \n",
       "Q 16.5 21.390625 20.328125 13.890625 \n",
       "Q 24.171875 6.390625 31.78125 6.390625 \n",
       "Q 39.453125 6.390625 43.28125 13.890625 \n",
       "Q 47.125 21.390625 47.125 36.375 \n",
       "Q 47.125 51.421875 43.28125 58.90625 \n",
       "Q 39.453125 66.40625 31.78125 66.40625 \n",
       "z\n",
       "M 31.78125 74.21875 \n",
       "Q 44.046875 74.21875 50.515625 64.515625 \n",
       "Q 56.984375 54.828125 56.984375 36.375 \n",
       "Q 56.984375 17.96875 50.515625 8.265625 \n",
       "Q 44.046875 -1.421875 31.78125 -1.421875 \n",
       "Q 19.53125 -1.421875 13.0625 8.265625 \n",
       "Q 6.59375 17.96875 6.59375 36.375 \n",
       "Q 6.59375 54.828125 13.0625 64.515625 \n",
       "Q 19.53125 74.21875 31.78125 74.21875 \n",
       "z\n",
       "\" id=\"DejaVuSans-30\"/>\n",
       "    </defs>\n",
       "    <g transform=\"translate(92.249375 16.318125)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p97d7c4423e\">\n",
       "   <rect height=\"217.44\" width=\"217.44\" x=\"10.7\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def load_image(img_path, size=(32, 32)):\n",
    "    label = 1 if tf.strings.regex_full_match(img_path, \".*/automobile/.*\") else 0\n",
    "    img = tf.io.read_file(img_path)\n",
    "    img = tf.image.decode_jpeg(img) # 注意此处为jpeg格式\n",
    "    img = tf.image.resize(img, size)\n",
    "    return (img, label)\n",
    "\n",
    "%matplotlib inline\n",
    "%config InlineBackend.figure_format='svg'\n",
    "for i, (img, label) in enumerate(ds6.map(load_image).take(2)):\n",
    "    plt.figure(i)\n",
    "    plt.imshow((img/255.0).numpy())\n",
    "    plt.title(\"label = %d\" % label)\n",
    "    plt.xticks([])\n",
    "    plt.yticks([])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**7、从tfrecords文件构建数据管道**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "\n",
    "# inpath：原始数据路径 outpath:TFRecord文件输出路径\n",
    "def create_tfrecords(inpath, outpath):\n",
    "    writer = tf.io.TFRecordWriter(outpath)\n",
    "    dirs = os.listdir(inpath)\n",
    "    for index, name in enumerate(dirs):\n",
    "        class_path = inpath + \"/\" + name + \"/\"\n",
    "        for img_name in os.listdir(class_path):\n",
    "            img_path = class_path + img_name\n",
    "            img = tf.io.read_file(img_path)\n",
    "            #img = tf.image.decode_image(img)\n",
    "            #img = tf.image.encode_jpeg(img) #统一成jpeg格式压缩\n",
    "            example = tf.train.Example(features=tf.train.Features(feature={\n",
    "                    \"label\": tf.train.Feature(int64_list=tf.train.Int64List(value=[index])),\n",
    "                    \"img_raw\": tf.train.Feature(bytes_list=tf.train.BytesList(value=[img.numpy()]))\n",
    "                    }))\n",
    "            writer.write(example.SerializeToString())\n",
    "    writer.close()\n",
    "\n",
    "create_tfrecords(\"./data/cifar2/test/\", \"./data/cifar2_test.tfrecords/\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Created with matplotlib (http://matplotlib.org/) -->\n",
       "<svg height=\"359.178125pt\" version=\"1.1\" viewBox=\"0 0 353.658824 359.178125\" width=\"353.658824pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       " <defs>\n",
       "  <style type=\"text/css\">\n",
       "*{stroke-linecap:butt;stroke-linejoin:round;}\n",
       "  </style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 359.178125 \n",
       "L 353.658824 359.178125 \n",
       "L 353.658824 0 \n",
       "L 0 0 \n",
       "z\n",
       "\" style=\"fill:none;\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 10.7 118.247537 \n",
       "L 106.629412 118.247537 \n",
       "L 106.629412 22.318125 \n",
       "L 10.7 22.318125 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#pcd06c79a76)\">\n",
       "    <image height=\"96\" id=\"image3357426afc\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"10.7\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-22.247537\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_1\"/>\n",
       "   <g id=\"matplotlib.axis_2\"/>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 10.7 118.247537 \n",
       "L 10.7 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 106.629412 118.247537 \n",
       "L 106.629412 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 10.7 118.247537 \n",
       "L 106.629412 118.247537 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_6\">\n",
       "    <path d=\"M 10.7 22.318125 \n",
       "L 106.629412 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- label = 0 -->\n",
       "    <defs>\n",
       "     <path d=\"M 9.421875 75.984375 \n",
       "L 18.40625 75.984375 \n",
       "L 18.40625 0 \n",
       "L 9.421875 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-6c\"/>\n",
       "     <path d=\"M 34.28125 27.484375 \n",
       "Q 23.390625 27.484375 19.1875 25 \n",
       "Q 14.984375 22.515625 14.984375 16.5 \n",
       "Q 14.984375 11.71875 18.140625 8.90625 \n",
       "Q 21.296875 6.109375 26.703125 6.109375 \n",
       "Q 34.1875 6.109375 38.703125 11.40625 \n",
       "Q 43.21875 16.703125 43.21875 25.484375 \n",
       "L 43.21875 27.484375 \n",
       "z\n",
       "M 52.203125 31.203125 \n",
       "L 52.203125 0 \n",
       "L 43.21875 0 \n",
       "L 43.21875 8.296875 \n",
       "Q 40.140625 3.328125 35.546875 0.953125 \n",
       "Q 30.953125 -1.421875 24.3125 -1.421875 \n",
       "Q 15.921875 -1.421875 10.953125 3.296875 \n",
       "Q 6 8.015625 6 15.921875 \n",
       "Q 6 25.140625 12.171875 29.828125 \n",
       "Q 18.359375 34.515625 30.609375 34.515625 \n",
       "L 43.21875 34.515625 \n",
       "L 43.21875 35.40625 \n",
       "Q 43.21875 41.609375 39.140625 45 \n",
       "Q 35.0625 48.390625 27.6875 48.390625 \n",
       "Q 23 48.390625 18.546875 47.265625 \n",
       "Q 14.109375 46.140625 10.015625 43.890625 \n",
       "L 10.015625 52.203125 \n",
       "Q 14.9375 54.109375 19.578125 55.046875 \n",
       "Q 24.21875 56 28.609375 56 \n",
       "Q 40.484375 56 46.34375 49.84375 \n",
       "Q 52.203125 43.703125 52.203125 31.203125 \n",
       "z\n",
       "\" id=\"DejaVuSans-61\"/>\n",
       "     <path d=\"M 48.6875 27.296875 \n",
       "Q 48.6875 37.203125 44.609375 42.84375 \n",
       "Q 40.53125 48.484375 33.40625 48.484375 \n",
       "Q 26.265625 48.484375 22.1875 42.84375 \n",
       "Q 18.109375 37.203125 18.109375 27.296875 \n",
       "Q 18.109375 17.390625 22.1875 11.75 \n",
       "Q 26.265625 6.109375 33.40625 6.109375 \n",
       "Q 40.53125 6.109375 44.609375 11.75 \n",
       "Q 48.6875 17.390625 48.6875 27.296875 \n",
       "z\n",
       "M 18.109375 46.390625 \n",
       "Q 20.953125 51.265625 25.265625 53.625 \n",
       "Q 29.59375 56 35.59375 56 \n",
       "Q 45.5625 56 51.78125 48.09375 \n",
       "Q 58.015625 40.1875 58.015625 27.296875 \n",
       "Q 58.015625 14.40625 51.78125 6.484375 \n",
       "Q 45.5625 -1.421875 35.59375 -1.421875 \n",
       "Q 29.59375 -1.421875 25.265625 0.953125 \n",
       "Q 20.953125 3.328125 18.109375 8.203125 \n",
       "L 18.109375 0 \n",
       "L 9.078125 0 \n",
       "L 9.078125 75.984375 \n",
       "L 18.109375 75.984375 \n",
       "z\n",
       "\" id=\"DejaVuSans-62\"/>\n",
       "     <path d=\"M 56.203125 29.59375 \n",
       "L 56.203125 25.203125 \n",
       "L 14.890625 25.203125 \n",
       "Q 15.484375 15.921875 20.484375 11.0625 \n",
       "Q 25.484375 6.203125 34.421875 6.203125 \n",
       "Q 39.59375 6.203125 44.453125 7.46875 \n",
       "Q 49.3125 8.734375 54.109375 11.28125 \n",
       "L 54.109375 2.78125 \n",
       "Q 49.265625 0.734375 44.1875 -0.34375 \n",
       "Q 39.109375 -1.421875 33.890625 -1.421875 \n",
       "Q 20.796875 -1.421875 13.15625 6.1875 \n",
       "Q 5.515625 13.8125 5.515625 26.8125 \n",
       "Q 5.515625 40.234375 12.765625 48.109375 \n",
       "Q 20.015625 56 32.328125 56 \n",
       "Q 43.359375 56 49.78125 48.890625 \n",
       "Q 56.203125 41.796875 56.203125 29.59375 \n",
       "z\n",
       "M 47.21875 32.234375 \n",
       "Q 47.125 39.59375 43.09375 43.984375 \n",
       "Q 39.0625 48.390625 32.421875 48.390625 \n",
       "Q 24.90625 48.390625 20.390625 44.140625 \n",
       "Q 15.875 39.890625 15.1875 32.171875 \n",
       "z\n",
       "\" id=\"DejaVuSans-65\"/>\n",
       "     <path id=\"DejaVuSans-20\"/>\n",
       "     <path d=\"M 10.59375 45.40625 \n",
       "L 73.1875 45.40625 \n",
       "L 73.1875 37.203125 \n",
       "L 10.59375 37.203125 \n",
       "z\n",
       "M 10.59375 25.484375 \n",
       "L 73.1875 25.484375 \n",
       "L 73.1875 17.1875 \n",
       "L 10.59375 17.1875 \n",
       "z\n",
       "\" id=\"DejaVuSans-3d\"/>\n",
       "     <path d=\"M 31.78125 66.40625 \n",
       "Q 24.171875 66.40625 20.328125 58.90625 \n",
       "Q 16.5 51.421875 16.5 36.375 \n",
       "Q 16.5 21.390625 20.328125 13.890625 \n",
       "Q 24.171875 6.390625 31.78125 6.390625 \n",
       "Q 39.453125 6.390625 43.28125 13.890625 \n",
       "Q 47.125 21.390625 47.125 36.375 \n",
       "Q 47.125 51.421875 43.28125 58.90625 \n",
       "Q 39.453125 66.40625 31.78125 66.40625 \n",
       "z\n",
       "M 31.78125 74.21875 \n",
       "Q 44.046875 74.21875 50.515625 64.515625 \n",
       "Q 56.984375 54.828125 56.984375 36.375 \n",
       "Q 56.984375 17.96875 50.515625 8.265625 \n",
       "Q 44.046875 -1.421875 31.78125 -1.421875 \n",
       "Q 19.53125 -1.421875 13.0625 8.265625 \n",
       "Q 6.59375 17.96875 6.59375 36.375 \n",
       "Q 6.59375 54.828125 13.0625 64.515625 \n",
       "Q 19.53125 74.21875 31.78125 74.21875 \n",
       "z\n",
       "\" id=\"DejaVuSans-30\"/>\n",
       "    </defs>\n",
       "    <g transform=\"translate(31.494081 16.318125)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_2\">\n",
       "   <g id=\"patch_7\">\n",
       "    <path d=\"M 128.864706 118.247537 \n",
       "L 224.794118 118.247537 \n",
       "L 224.794118 22.318125 \n",
       "L 128.864706 22.318125 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p5a6a1e7113)\">\n",
       "    <image height=\"96\" id=\"imagead0bfb7683\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"128.864706\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-22.247537\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_3\"/>\n",
       "   <g id=\"matplotlib.axis_4\"/>\n",
       "   <g id=\"patch_8\">\n",
       "    <path d=\"M 128.864706 118.247537 \n",
       "L 128.864706 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_9\">\n",
       "    <path d=\"M 224.794118 118.247537 \n",
       "L 224.794118 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_10\">\n",
       "    <path d=\"M 128.864706 118.247537 \n",
       "L 224.794118 118.247537 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_11\">\n",
       "    <path d=\"M 128.864706 22.318125 \n",
       "L 224.794118 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_2\">\n",
       "    <!-- label = 0 -->\n",
       "    <g transform=\"translate(149.658787 16.318125)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_3\">\n",
       "   <g id=\"patch_12\">\n",
       "    <path d=\"M 247.029412 118.247537 \n",
       "L 342.958824 118.247537 \n",
       "L 342.958824 22.318125 \n",
       "L 247.029412 22.318125 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p5fb52dd133)\">\n",
       "    <image height=\"96\" id=\"imagee0e30c578b\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"247.029412\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-22.247537\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_5\"/>\n",
       "   <g id=\"matplotlib.axis_6\"/>\n",
       "   <g id=\"patch_13\">\n",
       "    <path d=\"M 247.029412 118.247537 \n",
       "L 247.029412 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_14\">\n",
       "    <path d=\"M 342.958824 118.247537 \n",
       "L 342.958824 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_15\">\n",
       "    <path d=\"M 247.029412 118.247537 \n",
       "L 342.958824 118.247537 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_16\">\n",
       "    <path d=\"M 247.029412 22.318125 \n",
       "L 342.958824 22.318125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_3\">\n",
       "    <!-- label = 0 -->\n",
       "    <g transform=\"translate(267.823493 16.318125)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_4\">\n",
       "   <g id=\"patch_17\">\n",
       "    <path d=\"M 10.7 233.362831 \n",
       "L 106.629412 233.362831 \n",
       "L 106.629412 137.433419 \n",
       "L 10.7 137.433419 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p64a7c03297)\">\n",
       "    <image height=\"96\" id=\"imagef6e6b2bfc7\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"10.7\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-137.362831\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_7\"/>\n",
       "   <g id=\"matplotlib.axis_8\"/>\n",
       "   <g id=\"patch_18\">\n",
       "    <path d=\"M 10.7 233.362831 \n",
       "L 10.7 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_19\">\n",
       "    <path d=\"M 106.629412 233.362831 \n",
       "L 106.629412 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_20\">\n",
       "    <path d=\"M 10.7 233.362831 \n",
       "L 106.629412 233.362831 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_21\">\n",
       "    <path d=\"M 10.7 137.433419 \n",
       "L 106.629412 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_4\">\n",
       "    <!-- label = 1 -->\n",
       "    <defs>\n",
       "     <path d=\"M 12.40625 8.296875 \n",
       "L 28.515625 8.296875 \n",
       "L 28.515625 63.921875 \n",
       "L 10.984375 60.40625 \n",
       "L 10.984375 69.390625 \n",
       "L 28.421875 72.90625 \n",
       "L 38.28125 72.90625 \n",
       "L 38.28125 8.296875 \n",
       "L 54.390625 8.296875 \n",
       "L 54.390625 0 \n",
       "L 12.40625 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-31\"/>\n",
       "    </defs>\n",
       "    <g transform=\"translate(31.494081 131.433419)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_5\">\n",
       "   <g id=\"patch_22\">\n",
       "    <path d=\"M 128.864706 233.362831 \n",
       "L 224.794118 233.362831 \n",
       "L 224.794118 137.433419 \n",
       "L 128.864706 137.433419 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p80cef2c321)\">\n",
       "    <image height=\"96\" id=\"image3967e11673\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"128.864706\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-137.362831\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_9\"/>\n",
       "   <g id=\"matplotlib.axis_10\"/>\n",
       "   <g id=\"patch_23\">\n",
       "    <path d=\"M 128.864706 233.362831 \n",
       "L 128.864706 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_24\">\n",
       "    <path d=\"M 224.794118 233.362831 \n",
       "L 224.794118 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_25\">\n",
       "    <path d=\"M 128.864706 233.362831 \n",
       "L 224.794118 233.362831 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_26\">\n",
       "    <path d=\"M 128.864706 137.433419 \n",
       "L 224.794118 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_5\">\n",
       "    <!-- label = 1 -->\n",
       "    <g transform=\"translate(149.658787 131.433419)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_6\">\n",
       "   <g id=\"patch_27\">\n",
       "    <path d=\"M 247.029412 233.362831 \n",
       "L 342.958824 233.362831 \n",
       "L 342.958824 137.433419 \n",
       "L 247.029412 137.433419 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p73d2412f8d)\">\n",
       "    <image height=\"96\" id=\"image7e5566f047\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"247.029412\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-137.362831\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_11\"/>\n",
       "   <g id=\"matplotlib.axis_12\"/>\n",
       "   <g id=\"patch_28\">\n",
       "    <path d=\"M 247.029412 233.362831 \n",
       "L 247.029412 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_29\">\n",
       "    <path d=\"M 342.958824 233.362831 \n",
       "L 342.958824 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_30\">\n",
       "    <path d=\"M 247.029412 233.362831 \n",
       "L 342.958824 233.362831 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_31\">\n",
       "    <path d=\"M 247.029412 137.433419 \n",
       "L 342.958824 137.433419 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_6\">\n",
       "    <!-- label = 0 -->\n",
       "    <g transform=\"translate(267.823493 131.433419)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_7\">\n",
       "   <g id=\"patch_32\">\n",
       "    <path d=\"M 10.7 348.478125 \n",
       "L 106.629412 348.478125 \n",
       "L 106.629412 252.548713 \n",
       "L 10.7 252.548713 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#pd65a59c0a6)\">\n",
       "    <image height=\"96\" id=\"image5016571648\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"10.7\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-252.478125\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_13\"/>\n",
       "   <g id=\"matplotlib.axis_14\"/>\n",
       "   <g id=\"patch_33\">\n",
       "    <path d=\"M 10.7 348.478125 \n",
       "L 10.7 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_34\">\n",
       "    <path d=\"M 106.629412 348.478125 \n",
       "L 106.629412 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_35\">\n",
       "    <path d=\"M 10.7 348.478125 \n",
       "L 106.629412 348.478125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_36\">\n",
       "    <path d=\"M 10.7 252.548713 \n",
       "L 106.629412 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_7\">\n",
       "    <!-- label = 0 -->\n",
       "    <g transform=\"translate(31.494081 246.548713)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_8\">\n",
       "   <g id=\"patch_37\">\n",
       "    <path d=\"M 128.864706 348.478125 \n",
       "L 224.794118 348.478125 \n",
       "L 224.794118 252.548713 \n",
       "L 128.864706 252.548713 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p642a2b90dc)\">\n",
       "    <image height=\"96\" id=\"imagea0454e4e23\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"128.864706\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-252.478125\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_15\"/>\n",
       "   <g id=\"matplotlib.axis_16\"/>\n",
       "   <g id=\"patch_38\">\n",
       "    <path d=\"M 128.864706 348.478125 \n",
       "L 128.864706 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_39\">\n",
       "    <path d=\"M 224.794118 348.478125 \n",
       "L 224.794118 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_40\">\n",
       "    <path d=\"M 128.864706 348.478125 \n",
       "L 224.794118 348.478125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_41\">\n",
       "    <path d=\"M 128.864706 252.548713 \n",
       "L 224.794118 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_8\">\n",
       "    <!-- label = 0 -->\n",
       "    <g transform=\"translate(149.658787 246.548713)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_9\">\n",
       "   <g id=\"patch_42\">\n",
       "    <path d=\"M 247.029412 348.478125 \n",
       "L 342.958824 348.478125 \n",
       "L 342.958824 252.548713 \n",
       "L 247.029412 252.548713 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p4427e6cf77)\">\n",
       "    <image height=\"96\" id=\"image10430af41e\" transform=\"scale(1 -1)translate(0 -96)\" width=\"96\" x=\"247.029412\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-252.478125\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_17\"/>\n",
       "   <g id=\"matplotlib.axis_18\"/>\n",
       "   <g id=\"patch_43\">\n",
       "    <path d=\"M 247.029412 348.478125 \n",
       "L 247.029412 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_44\">\n",
       "    <path d=\"M 342.958824 348.478125 \n",
       "L 342.958824 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_45\">\n",
       "    <path d=\"M 247.029412 348.478125 \n",
       "L 342.958824 348.478125 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_46\">\n",
       "    <path d=\"M 247.029412 252.548713 \n",
       "L 342.958824 252.548713 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_9\">\n",
       "    <!-- label = 0 -->\n",
       "    <g transform=\"translate(267.823493 246.548713)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"27.783203\" xlink:href=\"#DejaVuSans-61\"/>\n",
       "     <use x=\"89.0625\" xlink:href=\"#DejaVuSans-62\"/>\n",
       "     <use x=\"152.539062\" xlink:href=\"#DejaVuSans-65\"/>\n",
       "     <use x=\"214.0625\" xlink:href=\"#DejaVuSans-6c\"/>\n",
       "     <use x=\"241.845703\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"273.632812\" xlink:href=\"#DejaVuSans-3d\"/>\n",
       "     <use x=\"357.421875\" xlink:href=\"#DejaVuSans-20\"/>\n",
       "     <use x=\"389.208984\" xlink:href=\"#DejaVuSans-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"pcd06c79a76\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"10.7\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p5a6a1e7113\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"128.864706\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p5fb52dd133\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"247.029412\" y=\"22.318125\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p64a7c03297\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"10.7\" y=\"137.433419\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p80cef2c321\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"128.864706\" y=\"137.433419\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p73d2412f8d\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"247.029412\" y=\"137.433419\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"pd65a59c0a6\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"10.7\" y=\"252.548713\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p642a2b90dc\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"128.864706\" y=\"252.548713\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p4427e6cf77\">\n",
       "   <rect height=\"95.929412\" width=\"95.929412\" x=\"247.029412\" y=\"252.548713\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 432x432 with 9 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def parse_example(proto):\n",
    "    description = {\n",
    "        \"img_raw\": tf.io.FixedLenFeature([], tf.string),\n",
    "        \"label\": tf.io.FixedLenFeature([], tf.int64)\n",
    "        }\n",
    "    example = tf.io.parse_single_example(proto, description)\n",
    "    img = tf.image.decode_jpeg(example[\"img_raw\"]) #注意此处为jpeg格式\n",
    "    img = tf.image.resize(img, (32, 32))\n",
    "    label = example[\"label\"]\n",
    "    return (img, label)\n",
    "\n",
    "ds7 = tf.data.TFRecordDataset(\"./data/cifar2_test.tfrecords\").map(parse_example).shuffle(3000)\n",
    "\n",
    "%matplotlib inline\n",
    "%config InlineBackend.figure_format = 'svg'\n",
    "plt.figure(figsize=(6,6)) \n",
    "for i,(img,label) in enumerate(ds7.take(9)):\n",
    "    ax=plt.subplot(3,3,i+1)\n",
    "    ax.imshow((img/255.0).numpy())\n",
    "    ax.set_title(\"label = %d\"%label)\n",
    "    ax.set_xticks([])\n",
    "    ax.set_yticks([]) \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 二、应用数据转换"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Dataset数据结构应用非常灵活，因为它本质上是一个Sequece序列，其每个元素可以是各种类型，例如可以是张量，列表，字典，也可以是Dataset。\n",
    "\n",
    "Dataset包含了非常丰富的数据转换功能。\n",
    "\n",
    "* map: 将转换函数映射到数据集每一个元素。\n",
    "\n",
    "* flat_map: 将转换函数映射到数据集的每一个元素，并将嵌套的Dataset压平。\n",
    "\n",
    "* interleave: 效果类似flat_map,但可以将不同来源的数据夹在一起。\n",
    "\n",
    "* filter: 过滤掉某些元素。\n",
    "\n",
    "* zip: 将两个长度相同的Dataset横向铰合。\n",
    "\n",
    "* concatenate: 将两个Dataset纵向连接。\n",
    "\n",
    "* reduce: 执行归并操作。\n",
    "\n",
    "* batch : 构建批次，每次放一个批次。比原始数据增加一个维度。 其逆操作为unbatch。\n",
    "\n",
    "* padded_batch: 构建批次，类似batch, 但可以填充到相同的形状。\n",
    "\n",
    "* window :构建滑动窗口，返回Dataset of Dataset.\n",
    "\n",
    "* shuffle: 数据顺序洗牌。\n",
    "\n",
    "* repeat: 重复数据若干次，不带参数时，重复无数次。\n",
    "\n",
    "* shard: 采样，从某个位置开始隔固定距离采样一个元素。\n",
    "\n",
    "* take: 采样，从开始位置取前几个元素。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[\"hello\" \"world\"]\n",
      "[\"hello\" \"China\"]\n",
      "[\"hello\" \"Beijing\"]\n",
      " \n",
      "tf.Tensor([b'hello' b'world'], shape=(2,), dtype=string)\n",
      "tf.Tensor([b'hello' b'China'], shape=(2,), dtype=string)\n",
      "tf.Tensor([b'hello' b'Beijing'], shape=(2,), dtype=string)\n"
     ]
    }
   ],
   "source": [
    "#map:将转换函数映射到数据集每一个元素\n",
    "ds = tf.data.Dataset.from_tensor_slices([\"hello world\",\"hello China\",\"hello Beijing\"])\n",
    "ds_map = ds.map(lambda x:tf.strings.split(x, \" \"))\n",
    "for x in ds_map:\n",
    "    tf.print(x)\n",
    "\n",
    "tf.print(\" \")\n",
    "for x in ds_map:\n",
    "    print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hello China\n",
      "hello Beijing\n"
     ]
    }
   ],
   "source": [
    "#filter:过滤掉某些元素。\n",
    "\n",
    "ds = tf.data.Dataset.from_tensor_slices([\"hello world\",\"hello China\",\"hello Beijing\"])\n",
    "#找出含有字母a或B的元素\n",
    "ds_filter = ds.filter(lambda x:tf.strings.regex_full_match(x, \".*[a|B].*\"))\n",
    "for x in ds_filter:\n",
    "    tf.print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<RangeDataset shapes: (), types: tf.int64>\n",
      "\n",
      "x = 0 , y = 3 , z = 6\n",
      "x = 1 , y = 4 , z = 7\n",
      "x = 2 , y = 5 , z = 8\n"
     ]
    }
   ],
   "source": [
    "#zip:将两个长度相同的Dataset横向铰合。\n",
    "ds1 = tf.data.Dataset.range(0, 3)\n",
    "ds2 = tf.data.Dataset.range(3,6)\n",
    "ds3 = tf.data.Dataset.range(6,9)\n",
    "ds_zip = tf.data.Dataset.zip((ds1, ds2, ds3))\n",
    "tf.print(ds1)\n",
    "tf.print(\"\")\n",
    "\n",
    "for x, y, z in ds_zip:\n",
    "    print(\"x =\", x.numpy(), \", y =\", y.numpy(), \", z =\", z.numpy())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n",
      "1\n",
      "2\n",
      "3\n",
      "4\n",
      "5\n"
     ]
    }
   ],
   "source": [
    "#condatenate:将两个Dataset纵向连接。\n",
    "\n",
    "ds1 = tf.data.Dataset.range(0,3)\n",
    "ds2 = tf.data.Dataset.range(3,6)\n",
    "\n",
    "ds_concat = tf.data.Dataset.concatenate(ds1, ds2)\n",
    "for x in ds_concat:\n",
    "    tf.print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: shape=(), dtype=float32, numpy=15.0>"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#reduce:执行归并操作。\n",
    "\n",
    "ds = tf.data.Dataset.from_tensor_slices([1,2,3,4,5.0])\n",
    "result = ds.reduce(0.0, lambda x,y: tf.add(x,y))\n",
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tf.Tensor([0 1 2 3], shape=(4,), dtype=int64)\n",
      "tf.Tensor([4 5 6 7], shape=(4,), dtype=int64)\n",
      "tf.Tensor([ 8  9 10 11], shape=(4,), dtype=int64)\n"
     ]
    }
   ],
   "source": [
    "#batch:构建批次，每次放一个批次。比原始数据增加一个维度。 其逆操作为unbatch。 \n",
    "ds = tf.data.Dataset.range(12)\n",
    "ds_batch = ds.batch(4)\n",
    "for x in ds_batch:\n",
    "    print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tf.Tensor(\n",
      "[[1 2 0 0]\n",
      " [3 4 5 0]], shape=(2, 4), dtype=int32)\n",
      "tf.Tensor(\n",
      "[[6 7 0 0]\n",
      " [8 0 0 0]], shape=(2, 4), dtype=int32)\n"
     ]
    }
   ],
   "source": [
    "#padded_batch:构建批次，类似batch, 但可以填充到相同的形状。\n",
    "\n",
    "elements = [[1, 2],[3, 4, 5],[6, 7],[8]]\n",
    "ds = tf.data.Dataset.from_generator(lambda: iter(elements), tf.int32)\n",
    "\n",
    "ds_padding_batch = ds.padded_batch(2, padded_shapes=[4,])\n",
    "for x in ds_padding_batch:\n",
    "    print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tf.Tensor([0 1 2], shape=(3,), dtype=int64)\n",
      "tf.Tensor([1 2 3], shape=(3,), dtype=int64)\n",
      "tf.Tensor([2 3 4], shape=(3,), dtype=int64)\n",
      "tf.Tensor([3 4 5], shape=(3,), dtype=int64)\n",
      "tf.Tensor([4 5 6], shape=(3,), dtype=int64)\n",
      "tf.Tensor([5 6 7], shape=(3,), dtype=int64)\n",
      "tf.Tensor([6 7 8], shape=(3,), dtype=int64)\n",
      "tf.Tensor([7 8 9], shape=(3,), dtype=int64)\n",
      "tf.Tensor([ 8  9 10], shape=(3,), dtype=int64)\n",
      "tf.Tensor([ 9 10 11], shape=(3,), dtype=int64)\n"
     ]
    }
   ],
   "source": [
    "#window:构建滑动窗口，返回Dataset of Dataset.\n",
    "ds = tf.data.Dataset.range(12)\n",
    "#window返回的是Dataset of Dataset,可以用flat_map压平\n",
    "ds_window = ds.window(3, shift=1).flat_map(lambda x: x.batch(3, drop_remainder=True))\n",
    "for x in ds_window:\n",
    "    print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tf.Tensor(1, shape=(), dtype=int64)\n",
      "tf.Tensor(3, shape=(), dtype=int64)\n",
      "tf.Tensor(6, shape=(), dtype=int64)\n",
      "tf.Tensor(4, shape=(), dtype=int64)\n",
      "tf.Tensor(2, shape=(), dtype=int64)\n",
      "tf.Tensor(7, shape=(), dtype=int64)\n",
      "tf.Tensor(8, shape=(), dtype=int64)\n",
      "tf.Tensor(11, shape=(), dtype=int64)\n",
      "tf.Tensor(10, shape=(), dtype=int64)\n",
      "tf.Tensor(0, shape=(), dtype=int64)\n",
      "tf.Tensor(5, shape=(), dtype=int64)\n",
      "tf.Tensor(9, shape=(), dtype=int64)\n"
     ]
    }
   ],
   "source": [
    "#shuffle:数据顺序洗牌。\n",
    "\n",
    "ds = tf.data.Dataset.range(12)\n",
    "ds_shuffle = ds.shuffle(buffer_size = 5)\n",
    "for x in ds_shuffle:\n",
    "    print(x)\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tf.Tensor(0, shape=(), dtype=int64)\n",
      "tf.Tensor(1, shape=(), dtype=int64)\n",
      "tf.Tensor(2, shape=(), dtype=int64)\n",
      "tf.Tensor(0, shape=(), dtype=int64)\n",
      "tf.Tensor(1, shape=(), dtype=int64)\n",
      "tf.Tensor(2, shape=(), dtype=int64)\n",
      "tf.Tensor(0, shape=(), dtype=int64)\n",
      "tf.Tensor(1, shape=(), dtype=int64)\n",
      "tf.Tensor(2, shape=(), dtype=int64)\n"
     ]
    }
   ],
   "source": [
    "#repeat:重复数据若干次，不带参数时，重复无数次。\n",
    "\n",
    "ds = tf.data.Dataset.range(3)\n",
    "ds_repeat = ds.repeat(3)\n",
    "for x in ds_repeat:\n",
    "    print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tf.Tensor(1, shape=(), dtype=int64)\n",
      "tf.Tensor(4, shape=(), dtype=int64)\n",
      "tf.Tensor(7, shape=(), dtype=int64)\n",
      "tf.Tensor(10, shape=(), dtype=int64)\n"
     ]
    }
   ],
   "source": [
    "#shard:采样，从某个位置开始隔固定距离采样一个元素。\n",
    "\n",
    "ds = tf.data.Dataset.range(12)\n",
    "ds_shard = ds.shard(3,index = 1)\n",
    "\n",
    "for x in ds_shard:\n",
    "    print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 1, 2]"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#take:采样，从开始位置取前几个元素。\n",
    "\n",
    "ds = tf.data.Dataset.range(12)\n",
    "ds_take = ds.take(3)\n",
    "\n",
    "list(ds_take.as_numpy_iterator())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 三、提升管道性能"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "训练深度学习模型常常会非常耗时。\n",
    "\n",
    "模型训练的耗时主要来自于两个部分，一部分来自**数据准备**，另一部分来自**参数迭代**。\n",
    "\n",
    "参数迭代过程的耗时通常依赖于GPU来提升。\n",
    "\n",
    "而数据准备过程的耗时则可以通过构建高效的数据管道进行提升。\n",
    "\n",
    "以下是一些构建高效数据管道的建议。\n",
    "\n",
    "* 1、使用 prefetch 方法让数据准备和参数迭代两个过程相互并行。\n",
    "\n",
    "* 2、使用 interleave 方法可以让数据读取过程多进程执行，并将不同来源数据夹在一起。\n",
    "\n",
    "* 3、使用 map 时设置num_parallel_calls 让数据转换过程多进行执行。\n",
    "\n",
    "* 4、使用 cache 方法让数据在第一个epoch后缓存到内存中，仅限于数据集不大情形。\n",
    "\n",
    "* 5、使用 map 转换时，先batch, 然后采用向量化的转换方法对每个batch进行转换。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "\n",
    "#打印时间分割线\n",
    "@tf.function\n",
    "def printbar():\n",
    "    ts = tf.timestamp()\n",
    "    today_ts = ts%(24*60*60)\n",
    "\n",
    "    hour = tf.cast(today_ts//3600+8,tf.int32)%tf.constant(24)\n",
    "    minite = tf.cast((today_ts%3600)//60,tf.int32)\n",
    "    second = tf.cast(tf.floor(today_ts%60),tf.int32)\n",
    "    \n",
    "    def timeformat(m):\n",
    "        if tf.strings.length(tf.strings.format(\"{}\",m))==1:\n",
    "            return(tf.strings.format(\"0{}\",m))\n",
    "        else:\n",
    "            return(tf.strings.format(\"{}\",m))\n",
    "    \n",
    "    timestring = tf.strings.join([timeformat(hour),timeformat(minite),\n",
    "                timeformat(second)],separator = \":\")\n",
    "    tf.print(\"==========\"*8,end = \"\")\n",
    "    tf.print(timestring)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time\n",
    "\n",
    "# 数据准备和参数迭代两个过程默认情况下是串行的。\n",
    "def generator():\n",
    "    for i in range(10):\n",
    "        #假设每次准备数据需2s\n",
    "        time.sleep(2)\n",
    "        yield i\n",
    "ds = tf.data.Dataset.from_generator(generator, output_types=(tf.int32))\n",
    "\n",
    "# 模拟参数迭代\n",
    "def train_step():\n",
    "    #假设每一步训练需要1s\n",
    "    time.sleep(1) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "================================================================================16:28:21\n",
      "start training...\n",
      "================================================================================16:28:51\n",
      "end training...\n"
     ]
    }
   ],
   "source": [
    "# 训练过程预计耗时 10*2+10*1+ = 30s\n",
    "printbar()\n",
    "tf.print(tf.constant(\"start training...\"))\n",
    "for x in ds:\n",
    "    train_step()  \n",
    "printbar()\n",
    "tf.print(tf.constant(\"end training...\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "================================================================================16:29:59\n",
      "start training with prefetch...\n",
      "================================================================================16:30:20\n",
      "end training...\n"
     ]
    }
   ],
   "source": [
    "# 使用 prefetch 方法让数据准备和参数迭代两个过程相互并行。\n",
    "\n",
    "# 训练过程预计耗时 max(10*2,10*1) = 20s\n",
    "printbar()\n",
    "tf.print(tf.constant(\"start training with prefetch...\"))\n",
    "\n",
    "# tf.data.experimental.AUTOTUNE 可以让程序自动选择合适的参数\n",
    "for x in ds.prefetch(buffer_size=tf.data.experimental.AUTOTUNE):\n",
    "    train_step()\n",
    "\n",
    "printbar()\n",
    "tf.print(tf.constant(\"end training...\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**2、使用 interleave 方法可以让数据读取过程多进程执行,并将不同来源数据夹在一起。**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tf.Tensor(b'493,0,1,\"Molson, Mr. Harry Markland\",male,55.0,0,0,113787,30.5,C30,S', shape=(), dtype=string)\n",
      "tf.Tensor(b'53,1,1,\"Harper, Mrs. Henry Sleeper (Myna Haxtun)\",female,49.0,1,0,PC 17572,76.7292,D33,C', shape=(), dtype=string)\n",
      "tf.Tensor(b'388,1,2,\"Buss, Miss. Kate\",female,36.0,0,0,27849,13.0,,S', shape=(), dtype=string)\n",
      "tf.Tensor(b'192,0,2,\"Carbines, Mr. William\",male,19.0,0,0,28424,13.0,,S', shape=(), dtype=string)\n"
     ]
    }
   ],
   "source": [
    "ds_files = tf.data.Dataset.list_files(\"./data/titanic/*.csv\")\n",
    "ds = ds_files.flat_map(lambda x:tf.data.TextLineDataset(x).skip(1))\n",
    "for line in ds.take(4):\n",
    "    print(line)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**3、使用 map 时设置num_parallel_calls 让数据转换过程多进行执行。**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "ds = tf.data.Dataset.list_files(\"./data/cifar2/train/*/*.jpg\")\n",
    "\n",
    "def load_image(img_path, size=(32, 32)):\n",
    "    label = 1 if tf.strings.regex_full_match(img_path,\".*/automobile/.*\") else 0\n",
    "    img = tf.io.read_file(img_path)\n",
    "    img = tf.image.decode_jpeg(img) #注意此处为jpeg格式\n",
    "    img = tf.image.resize(img,size)\n",
    "    return(img,label)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "================================================================================16:33:54\n",
      "start transformation...\n",
      "================================================================================16:33:56\n",
      "end transformation...\n"
     ]
    }
   ],
   "source": [
    "#单进程转换\n",
    "printbar()\n",
    "tf.print(tf.constant(\"start transformation...\"))\n",
    "\n",
    "ds_map = ds.map(load_image)\n",
    "for _ in ds_map:\n",
    "    pass\n",
    "\n",
    "printbar()\n",
    "tf.print(tf.constant(\"end transformation...\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "================================================================================16:35:33\n",
      "start parallel transformation...\n",
      "================================================================================16:35:34\n",
      "end parallel transformation...\n"
     ]
    }
   ],
   "source": [
    "#多进程转换\n",
    "printbar()\n",
    "tf.print(tf.constant(\"start parallel transformation...\"))\n",
    "\n",
    "ds_map_parallel = ds.map(load_image, num_parallel_calls=tf.data.experimental.AUTOTUNE)\n",
    "\n",
    "for _ in ds_map_parallel:\n",
    "    pass\n",
    "\n",
    "printbar()\n",
    "tf.print(tf.constant(\"end parallel transformation...\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**4、使用 cache 方法让数据在第一个epoch后缓存到内存中，仅限于数据集不大情形。**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "================================================================================16:36:21\n",
      "start training...\n",
      "================================================================================16:36:31\n",
      "epoch = 0  ended\n",
      "================================================================================16:36:42\n",
      "epoch = 1  ended\n",
      "================================================================================16:36:52\n",
      "epoch = 2  ended\n",
      "================================================================================16:36:52\n",
      "end training...\n"
     ]
    }
   ],
   "source": [
    "import time\n",
    "\n",
    "# 模拟数据准备\n",
    "def generator():\n",
    "    for i in range(5):\n",
    "        #假设每次准备数据需要2s\n",
    "        time.sleep(2) \n",
    "        yield i \n",
    "ds = tf.data.Dataset.from_generator(generator, output_types = (tf.int32))\n",
    "\n",
    "# 模拟参数迭代\n",
    "def train_step():\n",
    "    #假设每一步训练需要0s\n",
    "    pass\n",
    "\n",
    "# 训练过程预计耗时 (5*2+5*0)*3 = 30s\n",
    "printbar()\n",
    "tf.print(tf.constant(\"start training...\"))\n",
    "for epoch in tf.range(3):\n",
    "    for x in ds:\n",
    "        train_step()  \n",
    "    printbar()\n",
    "    tf.print(\"epoch =\",epoch,\" ended\")\n",
    "printbar()\n",
    "tf.print(tf.constant(\"end training...\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "================================================================================16:37:26\n",
      "start training...\n",
      "================================================================================16:37:36\n",
      "epoch = 0  ended\n",
      "================================================================================16:37:36\n",
      "epoch = 1  ended\n",
      "================================================================================16:37:36\n",
      "epoch = 2  ended\n",
      "================================================================================16:37:36\n",
      "end training...\n"
     ]
    }
   ],
   "source": [
    "import time\n",
    "\n",
    "# 模拟数据准备\n",
    "def generator():\n",
    "    for i in range(5):\n",
    "        #假设每次准备数据需要2s\n",
    "        time.sleep(2) \n",
    "        yield i \n",
    "\n",
    "# 使用 cache 方法让数据在第一个epoch后缓存到内存中，仅限于数据集不大情形。\n",
    "ds = tf.data.Dataset.from_generator(generator,output_types = (tf.int32)).cache()\n",
    "\n",
    "# 模拟参数迭代\n",
    "def train_step():\n",
    "    #假设每一步训练需要0s\n",
    "    time.sleep(0) \n",
    "\n",
    "# 训练过程预计耗时 (5*2+5*0)+(5*0+5*0)*2 = 10s\n",
    "printbar()\n",
    "tf.print(tf.constant(\"start training...\"))\n",
    "for epoch in tf.range(3):\n",
    "    for x in ds:\n",
    "        train_step()  \n",
    "    printbar()\n",
    "    tf.print(\"epoch =\",epoch,\" ended\")\n",
    "printbar()\n",
    "tf.print(tf.constant(\"end training...\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**5、使用 map转换时，先batch, 然后采用向量化的转换方法对每个batch进行转换。**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "================================================================================16:38:36\n",
      "start scalar transformation...\n",
      "================================================================================16:38:39\n",
      "end scalar transformation...\n"
     ]
    }
   ],
   "source": [
    "#先map后batch\n",
    "ds = tf.data.Dataset.range(100000)\n",
    "ds_map_batch = ds.map(lambda x:x**2).batch(20)\n",
    "\n",
    "printbar()\n",
    "tf.print(tf.constant(\"start scalar transformation...\"))\n",
    "for x in ds_map_batch:\n",
    "    pass\n",
    "printbar()\n",
    "tf.print(tf.constant(\"end scalar transformation...\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "================================================================================16:38:49\n",
      "start vector transformation...\n",
      "================================================================================16:38:50\n",
      "end vector transformation...\n"
     ]
    }
   ],
   "source": [
    "#先batch后map\n",
    "ds = tf.data.Dataset.range(100000)\n",
    "ds_batch_map = ds.batch(20).map(lambda x:x**2)\n",
    "\n",
    "printbar()\n",
    "tf.print(tf.constant(\"start vector transformation...\"))\n",
    "for x in ds_batch_map:\n",
    "    pass\n",
    "printbar()\n",
    "tf.print(tf.constant(\"end vector transformation...\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
